﻿package com.mirror.llk.util;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.mirror.frame.log4j.ILog;
import com.mirror.frame.log4j.ILogFactory;
import com.mirror.frame.utils.BaseUtils;

/**
 * @Title: 配置文件相关缓存
 * @Description:
 * @Copyright: Copyright (c) 2012-7-30
 * @Company: 幻方朗睿
 * @Author: Andy.D
 * @Version: 1.0
 */
public final class ConfigCache {

    private static ILog log = ILogFactory.getILogInstance(ConfigCache.class);

    /**
     * 客户端接口请求超时时间（ms）
     */
    private static int httpClientSoTimeout;

    /**
     * 请求客户端接口请求连接等待时间（ms）
     */
    private static int httpClientConnectTimeout;

    /**
     * 图片根路径
     */
    private static String rootPath;

    /**
     * 配置文件信息
     */
    private static Map<String, String> configMap;

    /**
     * 默认构造函数
     */
    private ConfigCache() {

    }

    /**
     * @param logId
     *            读配置文件信息，存入缓存
     */
    public static void readConfigCache() {
        try {
            configMap = CommonUtils.getPropertiesConfig("config");
            if (null != configMap && !configMap.isEmpty()) {
                readHttpClientSoTime();
                readHttpClientConnTime();
                readRootPath();
            }
        }
        catch (Exception e) {
            log.error("ERROR:读取配置文件信息出错。", e);
        }
    }

    /**
     * @param logId
     *            读配置文件：从缓存中取出请求客户端等待的时间 return String 插入等待时间
     */
    private static void readHttpClientConnTime() {
        String str = configMap.get("httpclient.connect.timeout");
        if (StringUtils.isEmpty(str)) {
            log.error("启动异常，调用请求服务端地址请求超时时间为空！");
        } else {
            httpClientConnectTimeout = Integer.parseInt(str);
            log.info("读配置文件，调用请求服务端地址超时的时间为：" + httpClientConnectTimeout);
        }
    }

    /**
     * @param logId
     *            读配置文件：客户端接口请求超时时间（ms） return long 客户端接口请求超时时间（ms）
     */
    private static synchronized void readHttpClientSoTime() {
        String max = configMap.get("httpclient.so.timeout");
        if (BaseUtils.isNum(max)) {
            httpClientSoTimeout = Integer.parseInt(max);
            log.info("读配置文件，客户端接口请求超时时间（ms）为：" + httpClientSoTimeout);
        } else {
            log.error("启动异常，客户端接口请求超时时间（ms）为空或不合法！");
        }
    }

    /**
     * @param logId
     *            读配置文件：从缓存中取出主题图的绝对路径
     */
    private static void readRootPath() {
        String str = configMap.get("root.path");
        if (StringUtils.isEmpty(str)) {
            log.error("启动异常，读取图片的绝对根路径为空！");
        } else {
            rootPath = str.trim();
            log.info("读配置文件，读取图片的绝对路径为：" + rootPath);
        }
    }

    /**
     * 获取客户端接口请求超时时间（ms）
     * 
     * @return 客户端接口请求超时时间（ms）
     */
    public static int getHttpClientSoTimeout() {
        return httpClientSoTimeout;
    }

    /**
     * 获取请求客户端接口请求连接等待时间（ms）
     * 
     * @return 请求客户端接口请求连接等待时间（ms）
     */
    public static int getHttpClientConnectTimeout() {
        return httpClientConnectTimeout;
    }

    public static String getRootPath() {
        return rootPath;
    }

    public static void setRootPath(String rootPath) {
        ConfigCache.rootPath = rootPath;
    }

}